// 函数柯里化

// 柯里化，英语：Currying(果然是满满的英译中的既视感)
// 是把接受多个参数的函数变换成接受一个单一参数（最初函数的第一个参数）的函数，
// 并且返回接受余下的参数而且返回结果的新函数的技术。

// 普通函数
function add(x, y) {
    return x + y;
}

console.log(add(1,2));

// 柯里化函数
function curryingAdd(x) {
    return function(y) {
        return x + y;
    }
}

console.log(curryingAdd(1)(2));

// 柯里化函数的好处：函数复用、提前确认、延迟运行

// 1 参数复用

// 普通函数
function check(reg, text) {
    return reg.test(text);
}

console.log(check(/\d+/g, 'test')); // false
console.log(check(/[a-z]+/g, 'test')); // true

// 柯里化函数
function curryingCheck(reg) {
    return function(text) {
        return reg.test(text);
    }
}

var hasNumber = curryingCheck(/\d+/g);
var hasLetter = curryingCheck(/[a-z]+/g);

console.log(hasNumber("123")); // true
console.log(hasNumber("a123")); // true
console.log(hasNumber("abcabc")); // false

console.log(hasLetter("test")); // true